/*
  1. 什么时元数据
    元数据指附加在对象,类,方法,属性参数上的数据

  2. 元数据作用
    元数据用来帮助提供实现某些业务功能需要用到的数据

    对象和对象属性上使用元数据
      1. 安装reflect-metadata第三方包
        cnpm i reflect-metadata -S
*/

import "reflect-metadata";
let obj = {
  username: "罗斯福",
  age: 23,
  info() {
    console.log("信息");
  },
};

// 对象元数据
Reflect.defineMetadata("metaobjkey", "我是一个对象的元数据", obj);
console.log(Reflect.getMetadata("metaobjkey", obj));

// 在对象属性上定义和获取元数据
Reflect.defineMetadata("usernamemetakey", "用户名合法", obj, "username");
console.log(Reflect.getMetadata("usernamemetakey", obj, "username"));

// 参看对象或对象属性上是否存在某个元数据
if (Reflect.hasMetadata("describe", obj)) {
  console.log("obj存在describe元数据");
} else {
  console.log("obj不存在describe元数据");
}

if (Reflect.hasMetadata("metaobjkey", obj)) {
  console.log("obj存在metaobjkey元数据");
} else {
  console.log("obj不存在metaobjkey元数据");
}

export {};
